#include "async_time.h"

// index 起始下标
// maxIndex 最大下标 达到最大下标后还原起始下标
// millisecond 间隔时间 毫秒值
AsyncTime::AsyncTime(int index, int maxIndex, int millisecond)
{
  _index = index;
  // 备份起始下标，用作还原起始下标
  _oldIndex = index;
  _maxIndex = maxIndex;
  _time = millisecond;
  _currentTime = millis();
  _previousTime = millis();
}

// callback 传入需要执行的方法
// startCallback 是否执行
void AsyncTime::start(CallBackFunction callback, bool startCallback)
{
  _currentTime = millis();
  if (_currentTime - _previousTime >= _time && startCallback)
  {
    if (_maxIndex > 0)
    {
      if (_index > _maxIndex)
      {
        initIndex();
      }
    }
    callback(_index);
    _index++;
  }
}

// 清除 [_previousTime]
void AsyncTime::clearPreviousTime()
{
  _previousTime = millis();
}

// 还原起始下标
void AsyncTime::initIndex()
{
  _index = _oldIndex;
}

void AsyncTime::setTime(int value)
{
  _time = value;
}

void AsyncTime::clear()
{
  initIndex();
  clearPreviousTime();
}